package mSecretaria;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import myUtils.Constantes;
import myUtils.DBUtils;
import myUtils.IModelo;
import play.db.DB;
import play.db.jpa.Model;

public class MIgreja extends Model implements IModelo {
	
	//atributos
	
	private int codIgreja;
	private int codComunidade;
	private String nome;
	private String comunidade;
	private String endereco;

	//métodos de acesso
	public int getCodComunidade() {
		return codComunidade;
	}

	public void setCodComunidade(int codComunidade) {
		this.codComunidade = codComunidade;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getEndereco() {
		return endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	public int getCodIgreja() {
		return codIgreja;
	}

	public String getComunidade() {
		return comunidade;
	}
	
	//construtores
	
	public MIgreja(int aCodIgreja) throws Exception
	{
		
		ResultSet rs;
		
		String strQuery = "Select Igreja.*,Comunidade.Nome as Comunidade From Igreja, Comunidade Where Igreja.CodComunidade = Comunidade.CodComunidade and Igreja.CodIgreja = " + aCodIgreja;
				
		
		try
		{
			rs = DB.executeQuery(strQuery);
			
			
			if(rs == null)
				throw new Exception("Igreja não cadastrada!");
			
			while (rs.next())
			{
				this.codIgreja 		= rs.getInt("CodIgreja");
				this.codComunidade 	= rs.getInt("CodComunidade");
				this.nome			= rs.getString("Nome");
				this.endereco		= rs.getString("Endereco");
				this.comunidade		= rs.getString("Comunidade");
				
			}
			
		}
		catch(Exception e)
		{
			throw new Exception(e.getMessage());
		}		
		
	}
	
	
	public MIgreja(String aNome,String aEndereco,int aCodComunidade) throws Exception
	{
		ResultSet rs;
		
		String strQuery = "Select Comunidade.Nome as Comunidade From Comunidade Where Comunidade.CodComunidade  = " + aCodComunidade;
				
		
		try
		{
			rs = DB.executeQuery(strQuery);
			
			while (rs.next())
			{
				this.comunidade	= rs.getString("Comunidade");
			}
			
			this.codComunidade 	= aCodComunidade;
			this.codIgreja		= 0;
			this.endereco		= aEndereco;
			this.nome			= aNome;
		}
		catch(Exception e)
		{
			throw new Exception(e.getMessage());
		}
		
	}

	private MIgreja(int aCodIgreja,int aCodComunidade,String aNome,String aEndereco,String aComunidade)
	{
		this.codComunidade 	=	aCodComunidade;
		this.codIgreja		= 	aCodIgreja;
		this.nome			= 	aNome;
		this.endereco		= 	aEndereco;
		this.comunidade		= 	aComunidade;
	}
	
	public static List<MIgreja> select(int aCodIgreja,int aCodComunidade,String aNome) throws Exception
	{
		
		ResultSet rs;
		String nome,endereco;
		int codComunidade,codIgreja;
		String comunidade;
		
		List<MIgreja> retorno  = new ArrayList<MIgreja>();
		String strQuery = "select Igreja.*,Comunidade.Nome as Comunidade from Comunidade,Igreja where Comunidade.CodComunidade = Igreja.CodComunidade";

		if(aCodComunidade > 0)
		{
			strQuery += " and Comunidade.CodComunidade = " + aCodComunidade;
		}
		
		if(aCodIgreja > 0)
		{
			strQuery += " and Igreja.CodIgreja = " + aCodIgreja;
		}


		strQuery += " and Igreja.Nome Like '" + aNome + "%'";
		
		
		
		try
		{
			rs = DB.executeQuery(strQuery);	
			
			while (rs.next())
			{
				codComunidade 	= rs.getInt("CodComunidade");
				codIgreja		= rs.getInt("CodIgreja");
				nome			= rs.getString("Nome");
				comunidade		= rs.getString("Comunidade");
				endereco		= rs.getString("endereco");
				
				
								 
				MIgreja igreja = new MIgreja(codIgreja,codComunidade,nome,endereco,comunidade);
				retorno.add(igreja);
				
			}	
			
		}
		catch(Exception e)
		{
			throw new Exception(e.getMessage() + "\n Comando: " + strQuery);
		}
		
		return retorno;		

	}
	
	@Override
	public void update() throws Exception {
		
		ResultSet rs;
		
		if (this.codIgreja == 0)
		{
			this.insert();
		}
		else
		{
			String strQuery = "Update Igreja set CodComunidade = " + this.codComunidade ;
			strQuery += ", Nome = '" + this.nome + "'";
			strQuery += ", Endereco = '" + this.endereco + "'";
			
			strQuery += " Where Igreja.CodIgreja = " + this.codIgreja;
			 
			//atualiza o Objeto
			String strQuery2 = "Select Igreja.*,Comunidade.Nome as Comunidade From Igreja, Comunidade Where Igreja.CodComunidade = Comunidade.CodComunidade and Igreja.CodIgreja = " + this.codIgreja;
			
			
			try
			{
				DB.execute(strQuery);	
				rs = DB.executeQuery(strQuery2);
	
				while (rs.next())
				{
					this.codIgreja 		= rs.getInt("CodIgreja");
					this.codComunidade 	= rs.getInt("CodComunidade");
					this.nome			= rs.getString("Nome");
					this.endereco		= rs.getString("Endereco");
					this.comunidade		= rs.getString("Comunidade");
					
				}			
			
			}
			catch(Exception e)
			{
				throw new Exception(e.getMessage());
			}
				
		}
	}

	@Override
	public void excluir() throws Exception {
		
		if(this.codIgreja != 0)
		{
		
			String strQuery = "Delete From Igreja Where Igreja.CodIgreja = " + this.codIgreja;
			
			try
			{
				DB.execute(strQuery);			
			}
			catch(Exception e)
			{
				throw new Exception(e.getMessage() + "\n Comando: " + strQuery);
			}
		}

	}

	@Override
	public void insert() throws Exception {
		
		String strQuery = "Insert Into Igreja(CodComunidade,Nome,Endereco) Values (";
		strQuery += this.codComunidade;
		strQuery += ",'" + this.nome + "'";
		strQuery += ",'" + this.endereco + "')";
		
		try
		{
			DB.execute(strQuery);			
		}
		catch(Exception e)
		{
			throw new Exception(e.getMessage() + "\n Comando: " + strQuery);
		}

	}

}
